package com.ccp.dev.core.basic.base;

import com.ccp.dev.core.basic.web.query.QueryFilter;

import java.io.Serializable;
import java.util.List;
import java.util.Map;
//TODO  类注释内容： 类的说明、作者（最小子集）

/**
 * DAO接口。<br>
 * 默认支持添加，删除，更新，查询，分页方法。
 * @author casic
 */
public interface IBaseMapper<T, PK extends Serializable> {
    /**
     * 添加对象
     *
     * @param entity 要添加的对象
     * @return
     */
    int add(T entity);

    /**
     * 批量添加对象
     *
     * @param list 批量添加对象数据集合
     */
    int addList(List<T> list);

    /**
     * 根据主键删除
     *
     * @param id 数据主键
     */
    int delById(PK id);

    /**
     * 根据Long类型主键删除数据信息
     * @param id
     */
    int delById(Long id);

    /**
     * 根据主键集合批量删除
     * @param ids 数据主键的数组
     */
    int delByIdArray(PK[] ids);

    /**
     * 根据Long类型主键集合批量删除
     * @param ids 数据主键的数组
     */
    int delByIdArray(Long[] ids);

    /**
     * 更新对象
     *
     * @param entity 要更新的数据对象
     */
    int update(T entity);

    /**
     * 根据主键ID取得对象
     *
     * @param id  数据主键
     * @return
     */
    T getById(PK id);

    /**
     * 根据主键ID取得对象
     * @param id 数据主键
     * @return
     */
    T getById(Long id);

    /**
     * 根据条件获取列表数据
     *
     * @param map  查询参数封装的对象
     * @return
     */
    List<T> queryList(Map<String,Object> map);

    /**
     * 根据条件获取授权列表信息
     * @param queryFilter 查询参数封装的对象
     * @return
     */
    List<T> queryNewProcessList(QueryFilter queryFilter);

}
